package cn.felord.boot;

import java.util.Arrays;
import java.util.stream.Collectors;

public class ArrayMerge {


    /***
     * 实现一个merge函数 ，功能是将两个有序数组 ，将它们合并成一个有序数组
     * 输入： {1,2,3,7,9} ， {2,4,6}
     * 输出： {1,2,2,3,4,6,7,9}
     * 不能使用sort函数
     * 逆向双指针
     */
    public static int[] merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1, j = n - 1, k = m + n - 1;
        int[] temp = new int[m + n];
        //把数组num1复制到新的数组里面去操作
        System.arraycopy(nums1, 0, temp, 0, m);
        while (i >= 0 && j >= 0) {
            //从数组尾部开始操作,比较nums1[i]与nums2[j]将较大的放在temp尾部
            temp[k--] = temp[i] < nums2[j] ? nums2[j--] : temp[i--];
        }
        return temp;
    }

    public static void main(String[] args) {
        int[] nums1 = {1,2,3,7,9};
        int[] nums2 = {2,4,6};
        int[] array = merge(nums1, 5, nums2, 3);
        String str = Arrays.stream(array).mapToObj(String::valueOf).collect(Collectors.joining(","));
        System.out.println(str);


        int[] nums3 = {1};
        int[] nums4 = {3};
        int[] array1 = merge(nums3, 1, nums4, 1);
        String str1 = Arrays.stream(array1).mapToObj(String::valueOf).collect(Collectors.joining(","));
        System.out.println(str1);

    }

}
